﻿/*
 * @author rayzhang
 * @desc action事件处理
 */
#pragma once
#include "event_dispatcher.h"

namespace flow
{
class ActionDispatcher final : public EventDispatcher<std::optional<QVariant>, QVariantMap>
{
public:
    using EventDispatcher::EventDispatcher;
    using EventDispatcher::define;
    void define(const QString& key, std::function<void()> handler)
    {
        _routesMap[key] = [cb = std::move(handler)](auto)->ReturnType {
            cb();
            return {};
        };
    }
};

using ActionDispatcherPtr = std::unique_ptr<ActionDispatcher>;
// using ActionRouter = ActionDispatcher;
//
// class ActionDispatcherManager
//{
// public:
//     // 添加action事件分发器
//     void addDispatcher(const QString pattern, ActionDispatcherPtr dispatcher()) { _dispatcher()s[pattern] = _dispatcher()s; }
//     // 移除
//     // 分发事件
//     void disptcher(const QString path, QVariantMap args)
//     {
//         _dispatcher()s[path].dispatch(path, args);
//     }
// private:
//     QMap<QString, ActionDispatcher> _dispatcher()s;
// };
} // namespace cq
